package cn.stylefeng.guns.modular.erstar.service.impl;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.stylefeng.guns.core.exception.ServiceException;
import cn.stylefeng.guns.core.factory.PageFactory;
import cn.stylefeng.guns.core.pojo.page.PageResult;
import cn.stylefeng.guns.modular.erlist.entity.ErList;
import cn.stylefeng.guns.modular.erlist.service.impl.ErListServiceImpl;
import cn.stylefeng.guns.modular.erlove.entity.ErLove;
import  cn.stylefeng.guns.modular.erstar.entity.ErStar;
import  cn.stylefeng.guns.modular.erstar.mapper.ErStarMapper;
import  cn.stylefeng.guns.modular.erstar.model.param.ErStarParam;
import  cn.stylefeng.guns.modular.erstar.service.ErStarService;
import  cn.stylefeng.guns.modular.erstar.enums.ErStarExceptionEnum;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * er_star 服务实现类
 *
 * @author w
 * @date 2021/06/11 08:42
 */
@Service
public class ErStarServiceImpl extends ServiceImpl<ErStarMapper, ErStar> implements ErStarService {

    private  ErListServiceImpl erListService;

    @Override
    public PageResult<ErStar> page(ErStarParam erStarParam) {

        // 构造条件
        LambdaQueryWrapper<ErStar> queryWrapper = new LambdaQueryWrapper<>();
        if (ObjectUtil.isNotNull(erStarParam)) {
            //根据标题查询
            if (ObjectUtil.isNotEmpty(erStarParam.getCreateUser())) {
                queryWrapper.like(ErStar::getCreateUser, erStarParam.getCreateUser());
            }
        }
        // 查询分页结果
        return new PageResult<>(this.page(PageFactory.defaultPage(), queryWrapper));
    }

    @Override
    public List<ErList> list(ErStarParam erStarParam) {
        // 构造条件
        List<ErList> lists = this.baseMapper.getStar(erStarParam.getUid());
        return lists;
    }

    @Override
    public int star(ErStarParam erStarParam) {

        int state ;  // 1:  收藏成功   0：取消收藏
        LambdaQueryWrapper<ErStar> queryWrapper = new LambdaQueryWrapper<>();
        if(ObjectUtil.isNotEmpty(erStarParam)) {
            queryWrapper.and(q -> q.eq(ErStar::getEid,erStarParam.getEid())
                    .eq(ErStar::getUid,erStarParam.getUid()));
        }
        List<ErStar> list = this.list(queryWrapper);
        if(list.size() == 0 )
        {
            System.out.println(erStarParam);
            ErStar erStar = new ErStar();
            BeanUtil.copyProperties(erStarParam, erStar);
            this.save(erStar);
            state = 1;
        }else{
            this.remove(queryWrapper);
            state = 0;
        }
        return state;
    }
    @Override
    public int showStarState(ErStarParam erStarParam) {
        // 将dto转为实体
        int state ;  // 1:  已收藏   0：未收藏
        LambdaQueryWrapper<ErStar> queryWrapper = new LambdaQueryWrapper<>();
        if(ObjectUtil.isNotEmpty(erStarParam)) {
            queryWrapper.and(q -> q.eq(ErStar::getEid,erStarParam.getEid())
                    .eq(ErStar::getUid,erStarParam.getUid()));
        }
        List<ErStar> list = this.list(queryWrapper);
        if(list.size() == 0 )
        {
            state = 0;
        }else{
            state = 1;
        }
        return state;

    }


    @Override
    @Transactional(rollbackFor = Exception.class)
    public void delete(ErStarParam erStarParam) {
        this.removeById(erStarParam.getUid());
    }

    @Override
    public void edit(ErStarParam erStarParam) {

        // 根据id查询实体
        ErStar erStar = this.queryErStar(erStarParam);

        // 请求参数转化为实体
        BeanUtil.copyProperties(erStarParam, erStar);

        this.updateById(erStar);
    }

    @Override
    public ErStar detail(ErStarParam erStarParam) {
        return this.queryErStar(erStarParam);
    }



    /**
     * 获取er_star
     *
     * @author w
     * @since 2021/06/11 08:42
     */
    private ErStar queryErStar(ErStarParam erStarParam) {
        ErStar erStar = this.getById(erStarParam.getUid());
        if (ObjectUtil.isEmpty(erStar)) {
            throw new ServiceException(ErStarExceptionEnum.NOT_EXISTED);
        }
        return erStar;
    }
}